/**
 * 配置管理工具
 * 支持从外部配置文件读取配置
 */

export interface AppConfig {
  api: {
    baseUrl: string
    timeout: number
  }
  app: {
    name: string
    version: string
    debug: boolean
  }
  ui: {
    theme: string
    language: string
  }
}

// 默认配置
const defaultConfig: AppConfig = {
  api: {
    baseUrl: 'http://localhost:3000',
    timeout: 10000
  },
  app: {
    name: '储物柜管理系统',
    version: '1.0.0',
    debug: false
  },
  ui: {
    theme: 'default',
    language: 'zh-CN'
  }
}

// 全局配置实例
let globalConfig: AppConfig = { ...defaultConfig }

/**
 * 加载配置文件
 * 在Electron环境中从外部文件读取，在浏览器环境中从localStorage读取
 */
export async function loadConfig(): Promise<AppConfig> {
  try {
    // 检查是否在Electron环境中
    if (window.electronAPI && window.electronAPI.readConfig) {
      const configData = await window.electronAPI.readConfig()
      if (configData) {
        globalConfig = { ...defaultConfig, ...JSON.parse(configData) }
        console.log('配置文件加载成功:', globalConfig)
        return globalConfig
      }
    }
    
    // 浏览器环境：从localStorage读取
    const savedConfig = localStorage.getItem('app_config')
    if (savedConfig) {
      globalConfig = { ...defaultConfig, ...JSON.parse(savedConfig) }
      console.log('从localStorage加载配置:', globalConfig)
      return globalConfig
    }
  } catch (error) {
    console.error('加载配置文件失败:', error)
  }
  
  // 使用默认配置
  globalConfig = { ...defaultConfig }
  console.log('使用默认配置:', globalConfig)
  return globalConfig
}

/**
 * 保存配置
 * 在Electron环境中保存到配置文件，在浏览器环境中保存到localStorage
 */
export async function saveConfig(config: Partial<AppConfig>): Promise<void> {
  try {
    globalConfig = { ...globalConfig, ...config }
    
    // 检查是否在Electron环境中
    if (window.electronAPI && window.electronAPI.writeConfig) {
      await window.electronAPI.writeConfig(JSON.stringify(globalConfig))
      console.log('配置文件保存成功:', globalConfig)
    } else {
      // 浏览器环境：保存到localStorage
      localStorage.setItem('app_config', JSON.stringify(globalConfig))
      console.log('配置已保存到localStorage:', globalConfig)
    }
  } catch (error) {
    console.error('保存配置失败:', error)
    throw error
  }
}

/**
 * 获取当前配置
 */
export function getConfig(): AppConfig {
  return globalConfig
}

/**
 * 获取API基础URL
 */
export function getApiBaseUrl(): string {
  return globalConfig.api.baseUrl
}

/**
 * 获取请求超时时间
 */
export function getRequestTimeout(): number {
  return globalConfig.api.timeout
}

/**
 * 更新API基础URL
 */
export function updateApiBaseUrl(url: string): void {
  globalConfig.api.baseUrl = url
  saveConfig({ api: { ...globalConfig.api, baseUrl: url } })
}

// 扩展Window接口以支持Electron API
declare global {
  interface Window {
    electronAPI?: {
      readConfig: () => Promise<string | null>
      writeConfig: (config: string) => Promise<void>
    }
  }
}
